package com.sheng.leetcode.year2022.month12.day06;

import org.junit.Test;

import java.util.HashSet;
import java.util.Set;

/**
 * @author liusheng
 * @date 2022/12/06
 * <p>
 * 1805. 字符串中不同整数的数目<p>
 * <p>
 * 给你一个字符串 word ，该字符串由数字和小写英文字母组成。<p>
 * 请你用空格替换每个不是数字的字符。例如，"a123bc34d8ef34" 将会变成 " 123 34 8 34" 。<p>
 * 注意，剩下的这些整数为（相邻彼此至少有一个空格隔开）："123"、"34"、"8" 和 "34" 。<p>
 * 返回对 word 完成替换后形成的 不同 整数的数目。<p>
 * 只有当两个整数的 不含前导零 的十进制表示不同， 才认为这两个整数也不同。<p>
 * <p>
 * 示例 1：<p>
 * 输入：word = "a123bc34d8ef34"<p>
 * 输出：3<p>
 * 解释：不同的整数有 "123"、"34" 和 "8" 。注意，"34" 只计数一次。<p>
 * <p>
 * 示例 2：<p>
 * 输入：word = "leet1234code234"<p>
 * 输出：2<p>
 * <p>
 * 示例 3：<p>
 * 输入：word = "a1b01c001"<p>
 * 输出：1<p>
 * 解释："1"、"01" 和 "001" 视为同一个整数的十进制表示，因为在比较十进制值时会忽略前导零的存在。<p>
 * <p>
 * 提示：<p>
 * 1 <= word.length <= 1000<p>
 * word 由数字和小写英文字母组成<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/number-of-different-integers-in-a-string">1805. 字符串中不同整数的数目</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode1805 {

    @Test
    public void test01() {
//        String word = "a123bc34d8ef34";
//        String word = "leet1234code234";
//        String word = "a1b01c001";
//        String word = "a";
        String word = "0000123456789999999999999999999999994";
        System.out.println(new Solution().numDifferentIntegers(word));
    }
}

class Solution {
    public int numDifferentIntegers(String word) {
        // 将所有字母组成的子串替换为空格后，去除首尾两边的空格，然后进行分组
        String[] split = word.replaceAll("[a-z]+", " ").trim().split(" ");
        Set<String> set = new HashSet<>();
        for (String s : split) {
            if (!s.isEmpty()) {
                // 将非空字符串去掉开头的 0 之后添加入 set 集合中
                set.add(s.replaceFirst("^0*", ""));
            }
        }
        return set.size();
    }
}
